package com.berchen.数据结构.单链表;

/**
 * 单链表
 */
public class SignleLinketList {

    private Node head;

    public SignleLinketList() {
    }

    public boolean isEmpty() {
        return head == null;
    }

    public Node getHead() {
        return head;
    }

    /**
     * 合并两个链表
     * @param linketList1 链表1的头节点
     * @param linketList2 链表2的头节点
     * @return 返回的就是一个新的链表
     */
    public Node heBIn(Node linketList1,Node linketList2){

        Node headNew=new Node(0,"","");
        Node temp=headNew;
        while (true){
            if(linketList1==null&&linketList2==null){
                break;
            }
            if(linketList1==null){
                temp.next=linketList2;
                temp=temp.next;
                linketList2=linketList2.next;
            }
            if(linketList2==null){
                temp.next=linketList1;
                temp=temp.next;
                linketList1=linketList1.next;
            }
            if(linketList1.getNo()<= linketList2.getNo()){
                temp.next=linketList1;
                temp=temp.next;
                linketList1=linketList1.next;
            }
            else {
                temp.next=linketList2;
                temp=temp.next;
                linketList2=linketList2.next;
            }
        }
        return headNew.next;

    }
    /**
     * 按照排名添加
     *
     * @param node
     */
    public void add(Node node) {
        if (isEmpty()) {
            head = node;
        } else {
            Node temp = head;
            // 当只有一个元素的时候
            if (temp.next == null && node.getNo() < temp.getNo()) {
                head = node;
                head.next = temp;
            } else {
                // 当有多个元素的时候
                boolean flag=false;
                while (true) {
                    // 完全遍历完都没有找到要插入打位置
                    if(temp.next==null){
                        break;
                    }
                    // 找到了插入的位置
                    if (temp.getNo() <= node.getNo() && temp.next.getNo() > node.getNo()) {
                        node.next = temp.next;
                        temp.next = node;
                        flag=true;
                        break;
                    }
                    // 往下一个位置遍历
                    temp=temp.next;
                }
                if(!flag){
                    // 进行添加
                    temp.next=node;
                }
            }
        }
    }
    public void list(){
        if(isEmpty()) throw new RuntimeException("链表为空");
        Node temp=head;
        while (temp!=null){
            System.out.println(temp.toString());
            temp=temp.next;
        }
    }

}
